Alibaba Cloud Linux 3
server {
listen 80;
server_name example.com;
...
}
踩坑 server_name _; 不是通配符或 catch-all。Nginx 的默认站点由以下规则决定:
listen 80 default_server 的站点是默认站点default_server,则第一个加载的 server block 成为默认站点宝塔面板中文件按字母序加载,phpfpm_status.conf 排在前面就成了默认站点,导致未匹配域名的请求都走到它那里返回欢迎页。
正确做法 用 listen 80 default_server; 明确指定默认站点,或确保域名能精确匹配 server_name。
location ~ [^/]\.php(/|$) {
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi-82.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
要点
try_files $uri =404 是安全必备,防止 PHP 路径穿越漏洞unix:/tmp/php-cgi-82.sock)比 TCP(127.0.0.1:9000)性能更好include enable-php-82.conf; 一行即可,不要手写 location# 第一步:语法检查 nginx -t # 第二步:平滑重载(不断服务) nginx -s reload
踩坑 改完配置不重载,不会生效。重启(restart)会短暂断连,尽量用 reload。
pm = ondemand # 按需启动子进程 pm.max_children = 30
| 模式 | 说明 | 适用场景 |
|---|---|---|
static | 固定进程数 | 高流量、内存充足的服务器 |
dynamic | 动态调整 | 流量波动大 |
ondemand | 有请求才启动 | 低流量、节省内存 |
宝塔默认用 ondemand,低流量时很省内存,但首次请求会略慢。
listen = /tmp/php-cgi-82.sock listen.owner = www listen.group = www listen.mode = 0600
踩坑 Socket 文件权限必须与 Nginx worker 进程用户一致,否则返回 502 Bad Gateway。这里双方都用 www 用户。
max_execution_time = 300 # 最大执行时间(秒) memory_limit = 128M # 单脚本内存上限 upload_max_filesize = 50M # 上传文件大小 post_max_size = 50M # POST 数据大小
修改后重启 PHP-FPM:
kill -USR2 $(cat /www/server/php/82/var/run/php-fpm.pid)
datadir = /www/server/data port = 3306 socket = /tmp/mysql.sock
踩坑 宝塔安装的 MySQL 数据目录在 /www/server/data,不在标准路径。如果重装系统或迁移,要先备份这个目录。
宝塔的 MySQL 用 SysV init 脚本管理:
/etc/init.d/mysqld start|stop|restart chkconfig mysqld on # 设置开机自启
踩坑 宝塔的 mysql 包名是 bt-mysql57,不是标准的 mysql-server。用 yum install mysql 会装错。如果找不到 mysqld 二进制,检查 /www/server/mysql/bin/mysqld。
/www/server/panel/pyenv/bin/python /www/server/panel/tools.py root 新密码
MySQL root 密码存储在宝塔面板 SQLite 数据库的 config 表中(mysql_root 字段)。
| # | 坑 | 现象 | 原因与解决 |
|---|---|---|---|
| 1 | PHP 文件 404 | 访问 .php 文件返回 404 | Nginx 的 try_files 找不到文件,检查 root 路径和站点目录权限 |
| 2 | 外部 IP 访问到默认页 | 公网访问显示"没有找到站点" | 默认 server block 不对,用 default_server 指定 |
| 3 | 502 Bad Gateway | PHP 页面报 502 | PHP-FPM 未运行或 socket 权限不对,检查进程和 php-fpm.sock |
| 4 | MySQL 连不上 | Can't connect to MySQL server | MySQL 未启动 (check /etc/init.d/mysqld start) 或端口被防火墙阻挡 |
| 5 | 文件上传失败 | 大文件上传到一半断了 | 检查 php.ini 中的 upload_max_filesize 和 post_max_size,以及 Nginx 的 client_max_body_size |
| 6 | 修改配置不生效 | 改了 nginx.conf 但没变化 | 没有执行 nginx -s reload |
| 7 | 宝塔面板端口冲突 | 面板打不开 | 宝塔用 8888 端口,Nginx 用 888 作为 phpMyAdmin 端口,确保安全组放行 |
| 8 | 磁盘空间暴涨 | 日志文件越来越大 | 日志在 /www/wwwlogs/,定期清理或用 logrotate 做轮转 |
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';
allow 你的IP; deny all;
server_tokens off;(宝塔默认已开启)
www 用户,不要用 777
yum update(阿里云 Linux 基于 CentOS 8)